iT邦幫忙

2022 iThome 鐵人賽

DAY 5
2

「今天我們來嘗試寫一下 136. Single Number!」

看到題目的兩個人,開始打開筆電,躍躍欲試的想直接用迴圈處理掉這個題目。

「先別急,我們趁這個機會來講講 bit operation。」夏天說

「咦⋯⋯夏姐那是什麼?我看之前的兩本書,都沒有提到這個觀念?」

「沒關係,我跟你說」菁菁 google 了一番,花了一點時間跟曉欣解釋布林運算的概念。

「可是⋯⋯這些對二進位數字運作的概念,跟這次的題目有什麼關係呢?」曉欣聽完之後,不解地問。

「你看,我們可以發現,如果一個數字同時對某個數字做兩次 xor 運算,那麼就會回到原本的數字」夏天邊說邊在紙上寫著

a xor b xor b = a

「所以,以這題來說,我們只要將陣列內所有的數字 xor 在一起,就會得到落單的數字了」

「這樣寫好神奇喔」兩位一邊感嘆,一邊看著夏天寫下答案

class Solution {
    fun singleNumber(nums: IntArray): Int {
        var ans = 0
        for(element in nums) {
            ans = ans xor element
        }
        return ans
    }
}

看到 Accept 之後,夏天一邊喝著美式,一邊等兩位消化這段邏輯。

「如何?還想得通嗎?」夏天笑笑的看著緊盯螢幕發呆的兩位。

「還⋯⋯還可以吧」曉欣不確定的說。

「那我們再改寫一下」夏天一邊說,一邊調整程式碼

class Solution {
    fun singleNumber(nums: IntArray): Int {
        var ans = 0
        nums.forEach {
            ans = ans xor it
        }
        return ans
    }
}

「還可以這樣寫呀!這邊的 it 太奇妙了吧!」

「原來書上說到的 it 是這樣用的,這樣寫看起來變得好合理」

「如果兩位還可以接受的話,那我再換個寫法囉」看到兩位興奮的表情,夏天又寫了另一種答案

class Solution {
    fun singleNumber(nums: IntArray) 
        = nums.reduce { ans, element -> ans xor element }
}

「哇⋯⋯這」曉欣和菁菁面面相覷。

看到連這樣寫都可以通過,頭腦開始冒煙的兩人,夏天笑得很開心。

「今天先到這邊吧——兩位可以回家再研究看看。」


上一篇
Day 04:找尋遺失的秘寶:268. Missing Number
下一篇
Day 06:繼續鍛鍊 bit operation:231. Power of Two
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言